package com.github.cakin.shiro.chapter23.remote;

import org.apache.shiro.session.Session;

import java.io.Serializable;

/**
 * @className: RemoteServiceInterface
 * @description: 远程调用接口：根据应用 key 和用户名获取权限上下文（包括角色和权限字符串）
 * shiro-example-chapter23-server 模块服务端实现；shiro-example-chapter23-client 模块客户端调用
 * @date: 2020/6/1
 * @author: cakin
 */
public interface RemoteServiceInterface {
    /**
     * 功能描述：获得会话
     *
     * @param appKey    应用Key
     * @param sessionId sessionId
     * @return Session 会话
     * @author cakin
     * @date 2020/6/1
     */
    Session getSession( String appKey, Serializable sessionId );

    /**
     * 功能描述：创建会话
     *
     * @param session 会话
     * @return Serializable 主键
     * @author cakin
     * @date 2020/6/1
     */
    Serializable createSession( Session session );

    /**
     * 功能描述：更新会话
     *
     * @param session 会话
     * @param appKey  应用key
     * @author cakin
     * @date 2020/6/1
     */
    void updateSession( String appKey, Session session );

    /**
     * 功能描述：删除会话
     *
     * @param session 会话
     * @param appKey  应用key
     * @author cakin
     * @date 2020/6/1
     */
    void deleteSession( String appKey, Session session );

    /**
     * 功能描述：根据应用 key 和用户名获取权限上下文（包括角色和权限字符串）
     *
     * @param appKey   应用key
     * @param username 用户名
     * @return PermissionContext 权限上下文
     * @author cakin
     * @date 2020/6/1
     */
    PermissionContext getPermissions( String appKey, String username );
}
